package com.advertisementsystem.Servie;

import com.advertisementsystem.entity.Notification;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

public interface NotificationService {

    // extends IService<Notification>
    /**
     * 获取用户消息列表
     *
     * @param page   分页参数
     * @param userId 用户ID
     * @param type   消息类型
     * @param read   是否已读
     * @return 分页消息列表
     */
    IPage<Notification> getNotificationList(Page<Notification> page, Long userId, String type, Integer read);

    /**
     * 创建系统通知
     *
     * @param userId     用户ID
     * @param title      标题
     * @param content    内容
     * @param type       类型
     * @param targetId   目标ID
     * @param targetUrl  目标URL
     * @return 创建的通知
     */
    Notification createNotification(Long userId, String title, String content,
                                    String type, Long targetId, String targetUrl);

    /**
     * 创建协商完成通知
     *
     * @param negotiationId   协商ID
     * @param advertisementId 广告ID
     * @param receiverId      接收者ID
     * @param senderName      发送者名称
     * @return 创建的通知
     */
    Notification createNegotiationCompletedNotification(Long negotiationId, Long advertisementId,
                                                        Long receiverId, String senderName);

    /**
     * 创建排期取消通知
     *
     * @param scheduleId      排期ID
     * @param advertisementId 广告ID
     * @param receiverId      接收者ID
     * @param senderName      发送者名称
     *
     * @return 创建的通知
     */
    Notification createScheduleCanceledNotification(Long scheduleId, Long advertisementId,
                                                    Long receiverId, String senderName);

    /**
     * 标记消息为已读
     *
     * @param notificationId  消息ID
     * @param userId          用户ID
     * @return 操作结果
     */
    boolean markAsRead(Long notificationId, Long userId);

    /**
     * 标记所有消息为已读
     *
     * @param userId  用户ID
     * @return 操作结果
     */
    boolean markAllAsRead(Long userId);

    /**
     * 删除消息
     *
     * @param notificationId  消息ID
     * @param userId          用户ID
     * @return 操作结果
     */
    boolean deleteNotification(Long notificationId, Long userId);

    /**
     * 获取未读消息数量
     *
     * @param userId  用户ID
     * @return 未读消息数量
     */
    int getUnreadCount(Long userId);
}